package com.zhihuishu.micro.course.openapi.app.teacher;

import java.util.List;
import java.util.Map;

import com.zhihuishu.micro.course.openapi.app.dto.ChapterWebDto;
import com.zhihuishu.micro.course.openapi.app.dto.CourseBaseInfoOpenDto;
import com.zhihuishu.micro.course.openapi.app.dto.CourseClipsOpenDto;
import com.zhihuishu.micro.course.openapi.app.dto.CourseOpenDto;
import com.zhihuishu.micro.course.openapi.app.enmus.CourseModelEnum;
import com.zhihuishu.micro.course.openapi.app.dto.CourseStatusDto;
import com.zhihuishu.remote.RemoteException;
import com.zhihuishu.remote.RemoteResult;

public interface AppCourseOpenServiceForTeacher {

   
    /**
     * 根据课程id查询课程完整度的信息
     * @author yulijin
     * @date 2016年12月8日 上午9:15:05 
         * @param courseId
         * @return key(String):progress：完整度百分比，mold（课程模式）:1老版建课、2新版本建课、3私有云建课、4海外建课、10微课程，
     *         filledTotalCount:必填项总数，unFilledCount：未填数
         * @throws RemoteException
     */
    RemoteResult<Map<String, Integer>> findProgressByCourseId(Long courseId) throws RemoteException;
    /**
     * 根据课程id清除redis中的课程完整的信息
     * @author yulijin
     * @date 2016年12月8日 上午9:19:15 
     * @param courseId
     * @return
     * @throws RemoteException
     */
    RemoteResult<Void> delProgressByCourseId(Long courseId) throws RemoteException;
    /**
     * APP建课：根据课程ID集合查询课程（id、名称）
     * @author ztl
     * @date 2016年12月12日下午2:13:24
     * @param courseIds
     * @return
     * @throws RemoteException
     */
    RemoteResult<List<Map<String, String>>> queryCourseIdAndNameForAppCreateCourse (List<Long> courseIds) throws RemoteException;
    
    /**
     * APP建课：过滤课程ID集合中为新版共享课的课程
     * @author ztl
     * @date 2016年12月12日下午2:39:08
     * @param courseIds
     * @return 传入的课程ID集合中新版共享课的课程ID集合
     */
    RemoteResult<List<Long>> filterCourseIsNew (List<Long> courseIds);
    
    /**
     * 查询课程基本信息
     * 
     * @param courseId
     * @return
     * @throws RemoteException
     */
    RemoteResult<CourseOpenDto> queryCourseInfo(long courseId);
    /**
     * @Description:更新课程背景
     *  @date:@2016年12月14日下午3:02:14
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:RemoteResult<Void>
     */
    RemoteResult<Void> updateCourseBackground(String content,long courseId ,long userId);
    /**
     * @Description:更新课程目标
     *  @date:@2016年12月14日下午4:45:43
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:RemoteResult<Void>
     */
    RemoteResult<Void> updateCourseTarget(String content,long courseId,long userId);
    /**
     * @Description:更新课程设计原则
     *  @date:@2016年12月14日下午4:55:10
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:RemoteResult<Void>
     */
    RemoteResult<Void> updateCourseDesignPrinciple(String content,long courseId,long userId);
    
    /**
     * @Description:更新课程基本信息
     *  @date:@2016年12月15日上午9:42:40
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:RemoteResult<Void>
     */
    RemoteResult<Void> updateCourseBaseInfo(CourseBaseInfoOpenDto courseBaseInfoOpenDto,long courseId,long userId);
    /**
     * 更新课程
     * 
     * @param course
     * @return
     * @throws RemoteException
     */
    RemoteResult<Void> update(CourseOpenDto course, long updateUser,long courseId) throws RemoteException;
    /**
     * 修改课程片花、推荐词 （添加适用，传入CC_COURSE_ID）
     * @author yulijin
     * @date 2016年12月14日 下午12:58:27 
     * @param clips
     * @return
     * @throws RemoteException
     */
    RemoteResult<Void> updateCourseClips(CourseClipsOpenDto clips,long updateUser,long courseId) throws RemoteException;
    /**
     * @Description:更新课程模式
     *  @date:@2016年12月15日下午4:47:53
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:RemoteResult<Void>
     */
    RemoteResult<Void> updateCourseModel(CourseModelEnum courseModelEnum,long courseId,long userId);
    /**
     * 查询片花 (clipsId:传入CC_COURSE_ID)
     * 课程片花查询
     * @param clipsId
     * @return
     * @throws RemoteException
     */
    RemoteResult<CourseClipsOpenDto> queryCourseClips(long clipsId) throws RemoteException;
    
    /**
     * @Description:查询课程章节列表的全部信息
     * @date:@2016年12月7日上午10:42:27
     * @author:嵇鹏
     * @Param:
     * @retuen:RemoteResult<List<ChapterWebDto>>
     */
    RemoteResult<List<ChapterWebDto>> queryCourseAllInfo(long courseId);
    /**
     * @Description:查询完整度的状态
     *  @date:@2017年1月10日上午9:07:46
     *  @author:嵇鹏
     *  @Param:
     *  @retuen:RemoteResult<CourseStatusDto>
     */
    RemoteResult<CourseStatusDto> findCoursesStatus(long courseId);

    /**
     * 查询考核标准是否完整
     * @author yulijin
     * @date 2017年2月9日 下午3:32:38 
     * @param courseId  courseMode： 1 混合式    2 纯在线
     * @return true:完整     false:不完整
     * @throws RemoteException
     */
    RemoteResult<Boolean> findScoreAssessRuleComplete(long courseId,int courseMode) throws RemoteException;

}
